{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "“C++ 风格头文件”指的是把 C 标准库以 C++ 形式引入的头文件：文件名以字母 c 开头、去掉 `.h` 后缀，并把标识符放入 `std` 命名空间中。例如用 `<cstdio>` 代替 `<stdio.h>`，函数用 `std::printf` 调用。\n",
    "\n",
    "要点说明：\n",
    "\n",
    "- 命名空间差异\n",
    "  - 使用 C++ 风格头时，函数与类型位于 `std` 命名空间，如 `std::printf`、`std::size_t`、`std::FILE*`。\n",
    "  - 传统 C 头（如 `<stdio.h>`）通常把名字放在全局命名空间里（如 `printf`、`size_t`、`FILE*`）。\n",
    "- 可移植与类型安全\n",
    "  - C++ 风格头与 C++ 的重载/模板规则配合更好，例如 `<cmath>` 中的 `std::abs` 针对整型/浮点型有重载，优于 `<math.h>` 下只提供 C 版本的 `abs/fabs`。\n",
    "- 使用方式\n",
    "  - 从 `<stdio.h>` 切到 `<cstdio>` 后，需要把调用从 `printf` 改为 `std::printf`（或显式 `using std::printf;`）。\n",
    "  - 从 `<assert.h>` 切到 `<cassert>` 后，断言仍然用 `assert` 宏（宏不在命名空间中），但推荐只包含 `<cassert>`。\n",
    "- 与 POSIX 头的关系\n",
    "  - 仅 C 标准库有 C++ 风格头。像 `unistd.h`、`poll.h`、`sys/timerfd.h`、`arpa/inet.h` 这类 POSIX/系统头没有对应的 C++ 风格版本，仍然使用原始的 `.h` 形式，并且符号在全局命名空间（如 `::poll`、`::timerfd_create`、`::close`）。\n",
    "- 兼容性与混用\n",
    "  - 同时包含 `<stdio.h>` 与 `<cstdio>` 在多数实现中可工作，但会让名字既出现在全局又出现在 `std` 中，不利于风格统一。建议择一使用，C 标准库优先选 C++ 风格头。\n",
    "- 常见映射举例\n",
    "  - `<stdio.h>` → `<cstdio>`（如 `std::printf`）\n",
    "  - `<stdlib.h>` → `<cstdlib>`（如 `std::getenv`、`std::atoi`）\n",
    "  - `<string.h>` → `<cstring>`（如 `std::memset`、`std::strlen`）\n",
    "  - `<math.h>` → `<cmath>`（如 `std::sin`、`std::abs`）\n",
    "  - `<time.h>` → `<ctime>`（如 `std::time`）\n",
    "  - `<assert.h>` → `<cassert>`\n",
    "  - `<stdint.h>` → `<cstdint>`（如 `std::uint32_t`）\n",
    "  - `<stddef.h>` → `<cstddef>`（如 `std::size_t`）\n",
    "  - `<ctype.h>` → `<cctype>`\n",
    "  - 注意：`<unistd.h>`、`<poll.h>`、`<sys/timerfd.h>` 无 C++ 风格替代，保持不变。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "C++17",
   "language": "C++17",
   "name": "xcpp17"
  },
  "language_info": {
   "name": "C++17"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
